var mysql = require('mysql');
var config =  require('../bin/config');
const log = require('./log');

//连接数据库
	var successInfo = {
		RESULT: "S",
		ERRMSG: "成功",
		code: 200,
		// data:res.json(ress)
	}
var pool = mysql.createPool({
    host: config.host,
    user: config.user,
    password: config.password,
    database: config.database,
    port: config.port,
    multipleStatements: true  //是否允许执行多条sql语句
})

// function count(tableName){

// }

 function select (sql, params = false) {
    return new Promise(function (reslove, reject) {

        var data ={}
        pool.getConnection(function (err, connection) {
            if (err) {
                console.error(err);
                return;
            }
            console.log(sql);
            if(params['tableName']){
                connection.query('select count(*) from '+params['tableName'],(error,res)=>{
                    if(error){
                        console.error(error);
                        return
                    }
                    data.total = res[0]['count(*)']
                })

            }
            connection.query(sql, params, function (error, res) {
                connection.release()
                if (error) {
                    console.error(err);
                    return;
                }
                data.data = res
                reslove(data)
            })
        })
    })
}

function insert(res, next,param,openid) {
    return new Promise(function (reslove, reject) {
		// 获取前台页面传过来的参数
		// ps:res和rsp有哪些属性可以去菜鸟教程的express部分查看，或者我在文末附上
        var data ={}
		// 获取数据库的连接
		pool.getConnection(function (err, connection) {
			// 捕捉链接错误信息并返回
			if (err) {
				json.rtnError(res,"数据库连接失败:"+err.message);
				return;
			}
			// 执行sql语句，这里是插入一条信息query一共有三个参数，第一个是sql语句。第二个是参数数组，一定要和数据库的
			// 数据类型相对应，也要跟sql语句的占位符相对应。第三个是回调函数，err代表访问是否出错，result代表本次访问的回执信息
             connection.query("INSERT INTO `user`(open_id,user_name,gender) VALUES(?,?,?)",
              [openid, param.user_name, param.gender],
               function (err, result) {
                // 插入失败，返回错误信息
                console.log(result);
				if(err){
                   console.log(err.message);
                   successInfo.ERRMSG="存入失败"
                    // json.rtnError(res,err.message);
                    data.data = err.message
					return;
                }
                
				// 插入成功返回操作成功，result可以自己打印看一下，当只做查询时返回查询到的数据，其他诸如增删改操作返回的是一个
				// 对象，其中affectedRows就是受影响的行数，其余的属性可以自行打印看看
				if (result.affectedRows>0) {
                    successInfo.ERRMSG="存入成功"
                    data.data = successInfo
				}
				// 释放连接，访问数据库完成一定要及时干掉此次连接请求，不然一会你的数据库就崩死了 
                connection.release();
            
                reslove(data)
			});
		});
    })

}
function profect(res, next,param,openid) {
    return new Promise(function (reslove, reject) {

        var data ={}
		// 获取数据库的连接
		pool.getConnection(function (err, connection) {
	
			if (err) {
				json.rtnError(res,"数据库连接失败:"+err.message);
				return;
			}
        
            console.log("openid"+openid);
             connection.query("INSERT INTO `user`(jieduan,shiq,special_bing,guoming) VALUES(?,?,?,?) from dual where openid =(select openid from user where openid = "+openid+")",
              [param.jieduan, param.shiq, param.special_bing,param.guoming],
               function (err, result) {
				// 插入失败，返回错误信息
				if(err){
                   console.log(err.message);
					// json.rtnError(res,err.message);
					return;
                }
                
		
				if (result.affectedRows>0) {
					data.data = result
				}
			
                connection.release();
            
                reslove(data)
			});
		});
    })

}
function collect (res,param) {
    return new Promise(function (reslove, reject) {

        var data ={}
		// 获取数据库的连接
		pool.getConnection(function (err, connection) {
	
			if (err) {
				json.rtnError(res,"数据库连接失败:"+err.message);
				return;
			}
        
            // console.log("openid"+openid);
             connection.query("INSERT INTO `sz_menus`(open_id,caipu_id,avator,title,brief) VALUES(?,?,?,?,?) ",
              [param.open_id, param.caipu_id, param.avator,param.title,param.brief],
               function (err, result) {
				// 插入失败，返回错误信息
				if(err){
                   console.log(err.message);
					// json.rtnError(res,err.message);
					return;
                }
                
		
				if (result.affectedRows>0) {
					data.data = result
				}
			
                connection.release();
            
                reslove(data)
			});
		});
    })

}

function getcollect (sql, params = false) {
    return new Promise(function (reslove, reject) {

        var data ={}
        pool.getConnection(function (err, connection) {
            if (err) {
                console.error(err);
                return;
            }
            console.log(sql);
            if(params['tableName']){
                connection.query('select count(*) from '+params['tableName'],(error,res)=>{
                    if(error){
                        console.error(error);
                        return
                    }
                    data.total = res[0]['count(*)']
                })

            }
            connection.query(sql, params, function (error, res) {
                connection.release()
                if (error) {
                    console.error(err);
                    return;
                }
                data.data = res
                reslove(data)
            })
        })
    })
}

function delcollect (res,param) {
    return new Promise(function (reslove, reject) {

        var data ={}
		// 获取数据库的连接
		pool.getConnection(function (err, connection) {
	
			if (err) {
				json.rtnError(res,"数据库连接失败:"+err.message);
				return;
			}
        
            // console.log("openid"+openid);
             connection.query("DELETE FROM sz_menus WHERE caipu_id= ? ",
              [param.caipu_id],
               function (err, result) {
				// 插入失败，返回错误信息
				if(err){
                   console.log(err.message);
					// json.rtnError(res,err.message);
					return;
                }
                
				if (result.affectedRows>0) {
					data.data = result
				}
			
                connection.release();
            
                reslove(data)
			});
		});
    })
}

function gerecord(res,param) {
    return new Promise(function (reslove, reject) {

        var data ={}
		// 获取数据库的连接
		pool.getConnection(function (err, connection) {
	
			if (err) {
				json.rtnError(res,"数据库连接失败:"+err.message);
				return;
			}
        
            // console.log("openid"+openid);
             connection.query("DELETE FROM sz_menus WHERE caipu_id= ? ",
              [param.caipu_id],
               function (err, result) {
				// 插入失败，返回错误信息
				if(err){
                   console.log(err.message);
					// json.rtnError(res,err.message);
					return;
                }
                
				if (result.affectedRows>0) {
					data.data = result
				}
			
                connection.release();
            
                reslove(data)
			});
		});
    })
}



module.exports = {
   select:select,
   insert:insert,
   profect:profect,
   collect:collect,
   getcollect:getcollect,
   delcollect:delcollect
}